package usbcali.edu.co.pqrs.presentation.backingBeans;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.Serializable;
import java.sql.Blob;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.imageio.stream.FileImageOutputStream;
import javax.sql.rowset.serial.SerialBlob;
import javax.sql.rowset.serial.SerialException;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.panel.Panel;
import org.primefaces.component.selectbooleancheckbox.SelectBooleanCheckbox;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.*;

import usbcali.edu.co.pqrs.exceptions.ZMessManager;
import usbcali.edu.co.pqrs.modelo.AnexosRespuesta;
import usbcali.edu.co.pqrs.modelo.AreasInvolucradas;
import usbcali.edu.co.pqrs.modelo.InfoSolicitante;
import usbcali.edu.co.pqrs.modelo.SolicitudPqr;
import usbcali.edu.co.pqrs.modelo.TipoEstadoPqr;
import usbcali.edu.co.pqrs.modelo.TipoSolicitudPqr;
import usbcali.edu.co.pqrs.modelo.dto.AnexosRespuestaDTO;
import usbcali.edu.co.pqrs.modelo.dto.AnxsXAreaDTO;
import usbcali.edu.co.pqrs.modelo.dto.AreasInvolucradasDTO;
import usbcali.edu.co.pqrs.modelo.dto.DetalleDTO;
import usbcali.edu.co.pqrs.modelo.dto.InfoSolicitanteDTO;
import usbcali.edu.co.pqrs.modelo.dto.RespuestaSolDTO;
import usbcali.edu.co.pqrs.modelo.dto.SolicitudPqrDTO;
import usbcali.edu.co.pqrs.presentation.businessDelegate.IBusinessDelegatorView;
import usbcali.edu.co.pqrs.utilities.FacesUtils;
import usbcali.edu.co.pqrs.utilities.Utilities;

/**
 * @author Zathura Code Generator http://code.google.com/p/zathura
 * 
 */
@ManagedBean
@ViewScoped
public class SolicitudPqrView implements Serializable {
	private static final long serialVersionUID = 1L;
	private InputText txtDescripcionCaso;
	private InputText txtNombreAgenciaAduana;
	private InputText txtNombreCliente;
	private InputText txtNumeroRadicacion;
	private InputText txtSolicitudARealizar;
	private InputText txtUsuarioCreador;
	private InputText txtUsuarioUltimaModificacion;
	private Panel panel;
	private List<RespuestaSolDTO> respuestas;
	private List<List<AnexosRespuestaDTO>> anexosRespuesta = new ArrayList<List<AnexosRespuestaDTO>>();

	private InputText inNombreEmpresa;
	private InputText inNombrecontacto;
	private InputText incorreo;
	private InputText incelular;
	private InputText intelefono;
	private InputText identificacion;
	private InputTextarea indescripcion;
	private InputTextarea indescripcion2;
	private InputTextarea indescripcion3;
	private String message;

	private String descripcionCaso;
	private String nombreAgenciaAduana;
	private String nombreCliente;
	private String numeroRadicado;
	private String SolicitudARealizar;
	private String iden;

	private String nombreEmpresa;
	private String fecha;
	private String correo;
	private String telefono;
	private String celular;
	private String nombreContacto;
	private String descrip;
	private String descrip2;
	private String descrip3;

	private SelectOneMenu areasInvo;
	private Map<String, String> id_area = new HashMap<String, String>();
	private Long idanex;

	private SelectOneMenu txtIdInfoSolicitante_InfoSolicitante;
	private SelectOneMenu txtIdTpEstPqr_TipoEstadoPqr;
	private SelectOneMenu txtIdTpSolPqr_TipoSolicitudPqr;

	private Long idInfoSolicitante_InfoSolicitante;
	private Long idTpEstPqr_TipoEstadoPqr;
	private Long idTpSolPqr_TipoSolicitudPqr;

	private Map<String, String> id_infoSolicitante = new HashMap<String, String>();
	private Map<String, String> id_tipoEstadoPqr = new HashMap<String, String>();
	private Map<String, String> id_tipoSolicitudPqr = new HashMap<String, String>();

	private String id_infoSolicitante_solicitante;
	private String id_tipoEstadoPqr_estadoPqr;
	private String id_tipoSolicitudPqr_solicitudPqr;

	private String fechaDes;
	private String fechaHast;

	private InputText txtIdSolPqr;

	private Calendar txtFechaCreacion;
	private Calendar txtFechaHasta;
	private Calendar txtFechaUltimaModificacion;

	private CommandButton btnSave;
	private CommandButton btnSavee;
	private CommandButton btnModify;
	private CommandButton btnDelete;
	private CommandButton btnClear;

	private SelectBooleanCheckbox check;
	private AnexosRespuestaDTO anexosRespuestaDTO;
	private List<AnexosRespuestaDTO> listaAnexosRespuesta;
	private List<AnxsXAreaDTO> anexos;
	private int idSolPqr;

	private List<SolicitudPqrDTO> data;
	private List<SolicitudPqrDTO> data2;

	List<DetalleDTO> detallesDTOs;

	private SolicitudPqrDTO selectedSolicitudPqr;
	private DetalleDTO seleDetalleDTO;

	private Long idSolicitudSeleccionada;

	private SolicitudPqr entity;
	private AreasInvolucradas entity3;

	private boolean showDialog;
	Utilities util = new Utilities();
	@ManagedProperty(value = "#{BusinessDelegatorView}")
	private IBusinessDelegatorView businessDelegatorView;

	public SolicitudPqrView() {
		super();
	}

	public void rowEventListener(RowEditEvent e) {
		try {
			SolicitudPqrDTO solicitudPqrDTO = (SolicitudPqrDTO) e.getObject();

			if (txtDescripcionCaso == null) {
				txtDescripcionCaso = new InputText();
			}

			txtDescripcionCaso.setValue(solicitudPqrDTO.getDescripcionCaso());

			if (txtNombreAgenciaAduana == null) {
				txtNombreAgenciaAduana = new InputText();
			}

			txtNombreAgenciaAduana.setValue(solicitudPqrDTO
					.getNombreAgenciaAduana());

			if (txtNombreCliente == null) {
				txtNombreCliente = new InputText();
			}

			txtNombreCliente.setValue(solicitudPqrDTO.getNombreCliente());

			if (txtNumeroRadicacion == null) {
				txtNumeroRadicacion = new InputText();
			}

			txtNumeroRadicacion.setValue(solicitudPqrDTO.getNumeroRadicacion());

			if (txtSolicitudARealizar == null) {
				txtSolicitudARealizar = new InputText();
			}

			txtSolicitudARealizar.setValue(solicitudPqrDTO
					.getSolicitudARealizar());

			if (txtUsuarioCreador == null) {
				txtUsuarioCreador = new InputText();
			}

			txtUsuarioCreador.setValue(solicitudPqrDTO.getUsuarioCreador());

			if (txtUsuarioUltimaModificacion == null) {
				txtUsuarioUltimaModificacion = new InputText();
			}

			txtUsuarioUltimaModificacion.setValue(solicitudPqrDTO
					.getUsuarioUltimaModificacion());

			if (txtIdInfoSolicitante_InfoSolicitante == null) {
				txtIdInfoSolicitante_InfoSolicitante = new SelectOneMenu();
			}

			txtIdInfoSolicitante_InfoSolicitante.setValue(solicitudPqrDTO
					.getIdInfoSolicitante_InfoSolicitante());

			if (txtIdTpEstPqr_TipoEstadoPqr == null) {
				txtIdTpEstPqr_TipoEstadoPqr = new SelectOneMenu();
			}

			txtIdTpEstPqr_TipoEstadoPqr.setValue(solicitudPqrDTO
					.getIdTpEstPqr_TipoEstadoPqr());

			if (txtIdTpSolPqr_TipoSolicitudPqr == null) {
				txtIdTpSolPqr_TipoSolicitudPqr = new SelectOneMenu();
			}

			txtIdTpSolPqr_TipoSolicitudPqr.setValue(solicitudPqrDTO
					.getIdTpSolPqr_TipoSolicitudPqr());

			if (txtIdSolPqr == null) {
				txtIdSolPqr = new InputText();
			}

			txtIdSolPqr.setValue(solicitudPqrDTO.getIdSolPqr());

			if (txtFechaCreacion == null) {
				txtFechaCreacion = new Calendar();
			}

			txtFechaCreacion.setValue(solicitudPqrDTO.getFechaCreacion());

			if (txtFechaUltimaModificacion == null) {
				txtFechaUltimaModificacion = new Calendar();
			}

			txtFechaUltimaModificacion.setValue(solicitudPqrDTO
					.getFechaUltimaModificacion());

			Long idSolPqr = FacesUtils.checkLong(txtIdSolPqr);
			entity = businessDelegatorView.getSolicitudPqr(idSolPqr);

			action_modify();
		} catch (Exception ex) {
		}
	}

	public String action_new() {
		action_clear();
		selectedSolicitudPqr = null;
		setShowDialog(true);

		return "";
	}

	public String action_clear() {
		entity = null;
		selectedSolicitudPqr = null;

		if (txtDescripcionCaso != null) {
			txtDescripcionCaso.setValue(null);
			// txtDescripcionCaso.setDisabled(true);
		}

		if (txtNombreAgenciaAduana != null) {
			txtNombreAgenciaAduana.setValue(null);
			// txtNombreAgenciaAduana.setDisabled(true);
		}

		if (txtNombreCliente != null) {
			txtNombreCliente.setValue(null);
			// txtNombreCliente.setDisabled(true);
		}

		if (txtNumeroRadicacion != null) {
			txtNumeroRadicacion.setValue(null);
			// txtNumeroRadicacion.setDisabled(true);
		}

		if (txtSolicitudARealizar != null) {
			txtSolicitudARealizar.setValue(null);
			// txtSolicitudARealizar.setDisabled(true);
		}

		if (txtUsuarioCreador != null) {
			txtUsuarioCreador.setValue(null);
			// txtUsuarioCreador.setDisabled(true);
		}

		if (txtUsuarioUltimaModificacion != null) {
			txtUsuarioUltimaModificacion.setValue(null);
			// txtUsuarioUltimaModificacion.setDisabled(true);
		}

		if (txtIdInfoSolicitante_InfoSolicitante != null) {
			txtIdInfoSolicitante_InfoSolicitante.setValue(null);
			// txtIdInfoSolicitante_InfoSolicitante.setDisabled(true);
		}

		if (txtIdTpEstPqr_TipoEstadoPqr != null) {
			txtIdTpEstPqr_TipoEstadoPqr.setValue(null);
			// txtIdTpEstPqr_TipoEstadoPqr.setDisabled(true);
		}

		if (txtIdTpSolPqr_TipoSolicitudPqr != null) {
			txtIdTpSolPqr_TipoSolicitudPqr.setValue(null);
			// txtIdTpSolPqr_TipoSolicitudPqr.setDisabled(true);
		}

		if (txtFechaCreacion != null) {
			txtFechaCreacion.setValue(null);
			// txtFechaCreacion.setDisabled(true);
		}

		if (txtFechaUltimaModificacion != null) {
			txtFechaUltimaModificacion.setValue(null);
			// txtFechaUltimaModificacion.setDisabled(true);
		}

		if (txtIdSolPqr != null) {
			txtIdSolPqr.setValue(null);
			// txtIdSolPqr.setDisabled(false);
		}

		if (btnSave != null) {
			// btnSave.setDisabled(true);
		}

		if (btnDelete != null) {
			btnDelete.setDisabled(true);
		}

		return "";
	}

	public void listener_txtFechaCreacion() {
		Date inputDate = (Date) txtFechaCreacion.getValue();
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		DateFormat dat = dateFormat.getDateInstance(DateFormat.SHORT);
		fechaDes = dat.format(inputDate);
		FacesContext.getCurrentInstance().addMessage(
				"",
				new FacesMessage("Selected Date "
						+ dateFormat.format(inputDate)));
	}

	public void listener_txtFechaUltimaModificacion() {
		Date inputDate = (Date) txtFechaUltimaModificacion.getValue();
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		DateFormat dat = dateFormat.getDateInstance(DateFormat.SHORT);
		fechaHast = dat.format(inputDate);
		FacesContext.getCurrentInstance().addMessage(
				"",
				new FacesMessage("Selected Date "
						+ dateFormat.format(inputDate)));
	}

	public void listener_txtFechaHasta() {
		Date inputDate = (Date) txtFechaHasta.getValue();
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		FacesContext.getCurrentInstance().addMessage(
				"",
				new FacesMessage("Selected Date "
						+ dateFormat.format(inputDate)));
	}

	// public void listener_txtId() {
	// try {
	// Long idSolPqr = FacesUtils.checkLong(txtIdSolPqr);
	// entity = (idSolPqr != null) ? businessDelegatorView
	// .getSolicitudPqr(idSolPqr) : null;
	// } catch (Exception e) {
	// entity = null;
	// }
	//
	// if (entity == null) {
	// txtDescripcionCaso.setDisabled(false);
	// txtNombreAgenciaAduana.setDisabled(false);
	// txtNombreCliente.setDisabled(false);
	// txtNumeroRadicacion.setDisabled(false);
	// txtSolicitudARealizar.setDisabled(false);
	// txtUsuarioCreador.setDisabled(false);
	// txtUsuarioUltimaModificacion.setDisabled(false);
	// txtIdInfoSolicitante_InfoSolicitante.setDisabled(false);
	// txtIdTpEstPqr_TipoEstadoPqr.setDisabled(false);
	// txtIdTpSolPqr_TipoSolicitudPqr.setDisabled(false);
	// txtFechaCreacion.setDisabled(false);
	// txtFechaUltimaModificacion.setDisabled(false);
	// txtIdSolPqr.setDisabled(false);
	// btnSave.setDisabled(false);
	// } else {
	// txtDescripcionCaso.setValue(entity.getDescripcionCaso());
	// txtDescripcionCaso.setDisabled(false);
	// txtFechaCreacion.setValue(entity.getFechaCreacion());
	// txtFechaCreacion.setDisabled(false);
	// txtFechaUltimaModificacion.setValue(entity
	// .getFechaUltimaModificacion());
	// txtFechaUltimaModificacion.setDisabled(false);
	// txtNombreAgenciaAduana.setValue(entity.getNombreAgenciaAduana());
	// txtNombreAgenciaAduana.setDisabled(false);
	// txtNombreCliente.setValue(entity.getNombreCliente());
	// txtNombreCliente.setDisabled(false);
	// txtNumeroRadicacion.setValue(entity.getNumeroRadicacion());
	// txtNumeroRadicacion.setDisabled(false);
	// txtSolicitudARealizar.setValue(entity.getSolicitudARealizar());
	// txtSolicitudARealizar.setDisabled(false);
	// txtUsuarioCreador.setValue(entity.getUsuarioCreador());
	// txtUsuarioCreador.setDisabled(false);
	// txtUsuarioUltimaModificacion.setValue(entity
	// .getUsuarioUltimaModificacion());
	// txtUsuarioUltimaModificacion.setDisabled(false);
	// txtIdInfoSolicitante_InfoSolicitante.setValue(entity
	// .getInfoSolicitante().getIdInfoSolicitante());
	// txtIdInfoSolicitante_InfoSolicitante.setDisabled(false);
	// txtIdTpEstPqr_TipoEstadoPqr.setValue(entity.getTipoEstadoPqr()
	// .getIdTpEstPqr());
	// txtIdTpEstPqr_TipoEstadoPqr.setDisabled(false);
	// txtIdTpSolPqr_TipoSolicitudPqr.setValue(entity
	// .getTipoSolicitudPqr().getIdTpSolPqr());
	// txtIdTpSolPqr_TipoSolicitudPqr.setDisabled(false);
	// txtIdSolPqr.setValue(entity.getIdSolPqr());
	// txtIdSolPqr.setDisabled(true);
	// btnSave.setDisabled(false);
	//
	// if (btnDelete != null) {
	// btnDelete.setDisabled(false);
	// }
	// }
	// }

	public String action_edit(ActionEvent evt) {
		selectedSolicitudPqr = (SolicitudPqrDTO) (evt.getComponent()
				.getAttributes().get("selectedSolicitudPqr"));
		txtDescripcionCaso.setValue(selectedSolicitudPqr.getDescripcionCaso());
		txtDescripcionCaso.setDisabled(false);
		txtFechaCreacion.setValue(selectedSolicitudPqr.getFechaCreacion());
		txtFechaCreacion.setDisabled(false);
		txtFechaUltimaModificacion.setValue(selectedSolicitudPqr
				.getFechaUltimaModificacion());
		txtFechaUltimaModificacion.setDisabled(false);
		txtNombreAgenciaAduana.setValue(selectedSolicitudPqr
				.getNombreAgenciaAduana());
		txtNombreAgenciaAduana.setDisabled(false);
		txtNombreCliente.setValue(selectedSolicitudPqr.getNombreCliente());
		txtNombreCliente.setDisabled(false);
		txtNumeroRadicacion
				.setValue(selectedSolicitudPqr.getNumeroRadicacion());
		txtNumeroRadicacion.setDisabled(false);
		txtSolicitudARealizar.setValue(selectedSolicitudPqr
				.getSolicitudARealizar());
		txtSolicitudARealizar.setDisabled(false);
		txtUsuarioCreador.setValue(selectedSolicitudPqr.getUsuarioCreador());
		txtUsuarioCreador.setDisabled(false);
		txtUsuarioUltimaModificacion.setValue(selectedSolicitudPqr
				.getUsuarioUltimaModificacion());
		txtUsuarioUltimaModificacion.setDisabled(false);
		txtIdInfoSolicitante_InfoSolicitante.setValue(selectedSolicitudPqr
				.getIdInfoSolicitante_InfoSolicitante());
		txtIdInfoSolicitante_InfoSolicitante.setDisabled(false);
		txtIdTpEstPqr_TipoEstadoPqr.setValue(selectedSolicitudPqr
				.getIdTpEstPqr_TipoEstadoPqr());
		txtIdTpEstPqr_TipoEstadoPqr.setDisabled(false);
		txtIdTpSolPqr_TipoSolicitudPqr.setValue(selectedSolicitudPqr
				.getIdTpSolPqr_TipoSolicitudPqr());
		txtIdTpSolPqr_TipoSolicitudPqr.setDisabled(false);
		txtIdSolPqr.setValue(selectedSolicitudPqr.getIdSolPqr());
		txtIdSolPqr.setDisabled(true);
		btnSave.setDisabled(false);
		setShowDialog(true);

		return "";
	}

	public String action_save() {
		try {
			if ((selectedSolicitudPqr == null) && (entity == null)) {
				action_create();
			} else {
				action_modify();
			}

			data = null;
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_create() {
		try {
			entity = new SolicitudPqr();

			// Long idSolPqr = FacesUtils.checkLong(txtIdSolPqr);

			entity.setDescripcionCaso(FacesUtils
					.checkString(txtDescripcionCaso));
			entity.setFechaCreacion(util.fecha());
			entity.setFechaUltimaModificacion(util.fecha());
			// entity.setIdSolPqr(idSolPqr);
			entity.setNombreAgenciaAduana(FacesUtils
					.checkString(txtNombreAgenciaAduana));
			entity.setNombreCliente(FacesUtils.checkString(txtNombreCliente));
			entity.setNumeroRadicacion(FacesUtils
					.checkString(txtNumeroRadicacion));
			entity.setSolicitudARealizar(FacesUtils
					.checkString(txtSolicitudARealizar));

			entity.setUsuarioCreador(FacesUtils.login());
			entity.setUsuarioUltimaModificacion(FacesUtils.login());

			entity.setInfoSolicitante((FacesUtils
					.checkLong(txtIdInfoSolicitante_InfoSolicitante) != null) ? businessDelegatorView
					.getInfoSolicitante(FacesUtils
							.checkLong(txtIdInfoSolicitante_InfoSolicitante))
					: null);

			entity.setTipoEstadoPqr((FacesUtils
					.checkLong(txtIdTpEstPqr_TipoEstadoPqr) != null) ? businessDelegatorView
					.getTipoEstadoPqr(FacesUtils
							.checkLong(txtIdTpEstPqr_TipoEstadoPqr)) : null);

			entity.setTipoSolicitudPqr((FacesUtils
					.checkLong(txtIdTpSolPqr_TipoSolicitudPqr) != null) ? businessDelegatorView
					.getTipoSolicitudPqr(FacesUtils
							.checkLong(txtIdTpSolPqr_TipoSolicitudPqr)) : null);

			businessDelegatorView.saveSolicitudPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);

			data = businessDelegatorView.getDataSolicitudPqr();
			RequestContext.getCurrentInstance().update("form:listaTDo");

			action_clear();
		} catch (Exception e) {
			entity = null;
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {
		try {
			if (entity == null) {
				Long idSolPqr = new Long(selectedSolicitudPqr.getIdSolPqr());
				entity = businessDelegatorView.getSolicitudPqr(idSolPqr);
			}

			entity.setDescripcionCaso(FacesUtils
					.checkString(txtDescripcionCaso));
			entity.setFechaCreacion(FacesUtils.checkDate(txtFechaCreacion));
			entity.setFechaUltimaModificacion(FacesUtils
					.checkDate(txtFechaUltimaModificacion));
			entity.setNombreAgenciaAduana(FacesUtils
					.checkString(txtNombreAgenciaAduana));
			entity.setNombreCliente(FacesUtils.checkString(txtNombreCliente));
			entity.setNumeroRadicacion(FacesUtils
					.checkString(txtNumeroRadicacion));
			entity.setSolicitudARealizar(FacesUtils
					.checkString(txtSolicitudARealizar));
			entity.setUsuarioCreador(FacesUtils.checkString(txtUsuarioCreador));
			entity.setUsuarioUltimaModificacion(FacesUtils
					.checkString(txtUsuarioUltimaModificacion));
			entity.setInfoSolicitante((FacesUtils
					.checkLong(txtIdInfoSolicitante_InfoSolicitante) != null) ? businessDelegatorView
					.getInfoSolicitante(FacesUtils
							.checkLong(txtIdInfoSolicitante_InfoSolicitante))
					: null);
			entity.setTipoEstadoPqr((FacesUtils
					.checkLong(txtIdTpEstPqr_TipoEstadoPqr) != null) ? businessDelegatorView
					.getTipoEstadoPqr(FacesUtils
							.checkLong(txtIdTpEstPqr_TipoEstadoPqr)) : null);
			entity.setTipoSolicitudPqr((FacesUtils
					.checkLong(txtIdTpSolPqr_TipoSolicitudPqr) != null) ? businessDelegatorView
					.getTipoSolicitudPqr(FacesUtils
							.checkLong(txtIdTpSolPqr_TipoSolicitudPqr)) : null);
			businessDelegatorView.updateSolicitudPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			data = null;
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete_datatable(ActionEvent evt) {
		try {
			selectedSolicitudPqr = (SolicitudPqrDTO) (evt.getComponent()
					.getAttributes().get("selectedSolicitudPqr"));

			Long idSolPqr = new Long(selectedSolicitudPqr.getIdSolPqr());
			entity = businessDelegatorView.getSolicitudPqr(idSolPqr);
			action_delete();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete_master() {
		try {
			Long idSolPqr = FacesUtils.checkLong(txtIdSolPqr);
			entity = businessDelegatorView.getSolicitudPqr(idSolPqr);
			action_delete();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public void action_delete() throws Exception {
		try {
			businessDelegatorView.deleteSolicitudPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
			data = null;
		} catch (Exception e) {
			throw e;
		}
	}

	public String action_closeDialog() {
		setShowDialog(false);
		action_clear();

		return "";
	}

	public String actionDeleteDataTableEditable(ActionEvent evt) {
		try {
			selectedSolicitudPqr = (SolicitudPqrDTO) (evt.getComponent()
					.getAttributes().get("selectedSolicitudPqr"));

			Long idSolPqr = new Long(selectedSolicitudPqr.getIdSolPqr());
			entity = businessDelegatorView.getSolicitudPqr(idSolPqr);
			businessDelegatorView.deleteSolicitudPqr(entity);
			data.remove(selectedSolicitudPqr);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modifyWitDTO(String descripcionCaso,
			Date fechaCreacion, Date fechaUltimaModificacion, Long idSolPqr,
			String nombreAgenciaAduana, String nombreCliente,
			String numeroRadicacion, String solicitudARealizar,
			String usuarioCreador, String usuarioUltimaModificacion,
			Long idInfoSolicitante_InfoSolicitante,
			Long idTpEstPqr_TipoEstadoPqr, Long idTpSolPqr_TipoSolicitudPqr)
			throws Exception {
		try {
			entity.setDescripcionCaso(FacesUtils.checkString(descripcionCaso));
			entity.setFechaCreacion(FacesUtils.checkDate(fechaCreacion));
			entity.setFechaUltimaModificacion(FacesUtils
					.checkDate(fechaUltimaModificacion));
			entity.setNombreAgenciaAduana(FacesUtils
					.checkString(nombreAgenciaAduana));
			entity.setNombreCliente(FacesUtils.checkString(nombreCliente));
			entity.setNumeroRadicacion(FacesUtils.checkString(numeroRadicacion));
			entity.setSolicitudARealizar(FacesUtils
					.checkString(solicitudARealizar));
			entity.setUsuarioCreador(FacesUtils.checkString(usuarioCreador));
			entity.setUsuarioUltimaModificacion(FacesUtils
					.checkString(usuarioUltimaModificacion));
			businessDelegatorView.updateSolicitudPqr(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("SolicitudPqrView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public InputText getTxtDescripcionCaso() {
		return txtDescripcionCaso;
	}

	public void setTxtDescripcionCaso(InputText txtDescripcionCaso) {
		this.txtDescripcionCaso = txtDescripcionCaso;
	}

	public InputText getTxtNombreAgenciaAduana() {
		return txtNombreAgenciaAduana;
	}

	public void setTxtNombreAgenciaAduana(InputText txtNombreAgenciaAduana) {
		this.txtNombreAgenciaAduana = txtNombreAgenciaAduana;
	}

	public InputText getTxtNombreCliente() {
		return txtNombreCliente;
	}

	public void setTxtNombreCliente(InputText txtNombreCliente) {
		this.txtNombreCliente = txtNombreCliente;
	}

	public InputText getTxtNumeroRadicacion() {
		return txtNumeroRadicacion;
	}

	public void setTxtNumeroRadicacion(InputText txtNumeroRadicacion) {
		this.txtNumeroRadicacion = txtNumeroRadicacion;
	}

	public InputText getTxtSolicitudARealizar() {
		return txtSolicitudARealizar;
	}

	public void setTxtSolicitudARealizar(InputText txtSolicitudARealizar) {
		this.txtSolicitudARealizar = txtSolicitudARealizar;
	}

	public InputText getTxtUsuarioCreador() {
		return txtUsuarioCreador;
	}

	public void setTxtUsuarioCreador(InputText txtUsuarioCreador) {
		this.txtUsuarioCreador = txtUsuarioCreador;
	}

	public InputText getTxtUsuarioUltimaModificacion() {
		return txtUsuarioUltimaModificacion;
	}

	public void setTxtUsuarioUltimaModificacion(
			InputText txtUsuarioUltimaModificacion) {
		this.txtUsuarioUltimaModificacion = txtUsuarioUltimaModificacion;
	}

	public InputText getInNombrecontacto() {
		return inNombrecontacto;
	}

	public void setInNombrecontacto(InputText inNombrecontacto) {
		this.inNombrecontacto = inNombrecontacto;
	}

	public InputText getIncorreo() {
		return incorreo;
	}

	public void setIncorreo(InputText incorreo) {
		this.incorreo = incorreo;
	}

	public InputText getIncelular() {
		return incelular;
	}

	public void setIncelular(InputText incelular) {
		this.incelular = incelular;
	}

	public InputText getIntelefono() {
		return intelefono;
	}

	public void setIntelefono(InputText intelefono) {
		this.intelefono = intelefono;
	}

	public InputTextarea getIndescripcion() {
		return indescripcion;
	}

	public void setIndescripcion(InputTextarea indescripcion) {
		this.indescripcion = indescripcion;
	}

	public Calendar getTxtFechaCreacion() {
		return txtFechaCreacion;
	}

	public void setTxtFechaCreacion(Calendar txtFechaCreacion) {
		this.txtFechaCreacion = txtFechaCreacion;
	}

	public Calendar getTxtFechaUltimaModificacion() {
		return txtFechaUltimaModificacion;
	}

	public void setTxtFechaUltimaModificacion(
			Calendar txtFechaUltimaModificacion) {
		this.txtFechaUltimaModificacion = txtFechaUltimaModificacion;
	}

	public InputText getTxtIdSolPqr() {
		return txtIdSolPqr;
	}

	public void setTxtIdSolPqr(InputText txtIdSolPqr) {
		this.txtIdSolPqr = txtIdSolPqr;
	}

	public List<SolicitudPqrDTO> getData() {

		return data;
	}

	public void setData(List<SolicitudPqrDTO> solicitudPqrDTO) {
		this.data = solicitudPqrDTO;
	}

	public AreasInvolucradas getEntity3() {
		return entity3;
	}

	public void setEntity3(AreasInvolucradas entity3) {
		this.entity3 = entity3;
	}

	public SolicitudPqrDTO getSelectedSolicitudPqr() {
		return selectedSolicitudPqr;
	}

	public void setSelectedSolicitudPqr(SolicitudPqrDTO solicitudPqr) {
		this.selectedSolicitudPqr = solicitudPqr;
	}

	public CommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(CommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public InputTextarea getIndescripcion2() {
		return indescripcion2;
	}

	public void setIndescripcion2(InputTextarea indescripcion2) {
		this.indescripcion2 = indescripcion2;
	}

	public String getDescrip2() {
		return descrip2;
	}

	public void setDescrip2(String descrip2) {
		this.descrip2 = descrip2;
	}

	public String getFecha() {
		return fecha;
	}

	public void setFecha(String fecha) {
		this.fecha = fecha;
	}

	public String getCorreo() {
		return correo;
	}

	public void setCorreo(String correo) {
		this.correo = correo;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public String getNombreContacto() {
		return nombreContacto;
	}

	public void setNombreContacto(String nombreContacto) {
		this.nombreContacto = nombreContacto;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public CommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(CommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public CommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(CommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public CommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(CommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	public IBusinessDelegatorView getBusinessDelegatorView() {
		return businessDelegatorView;
	}

	public void setBusinessDelegatorView(
			IBusinessDelegatorView businessDelegatorView) {
		this.businessDelegatorView = businessDelegatorView;
	}

	public boolean isShowDialog() {
		return showDialog;
	}

	public void setShowDialog(boolean showDialog) {
		this.showDialog = showDialog;
	}

	public SelectOneMenu getTxtIdInfoSolicitante_InfoSolicitante() {
		return txtIdInfoSolicitante_InfoSolicitante;
	}

	public void setTxtIdInfoSolicitante_InfoSolicitante(
			SelectOneMenu txtIdInfoSolicitante_InfoSolicitante) {
		this.txtIdInfoSolicitante_InfoSolicitante = txtIdInfoSolicitante_InfoSolicitante;
	}

	public SelectOneMenu getTxtIdTpEstPqr_TipoEstadoPqr() {
		return txtIdTpEstPqr_TipoEstadoPqr;
	}

	public void setTxtIdTpEstPqr_TipoEstadoPqr(
			SelectOneMenu txtIdTpEstPqr_TipoEstadoPqr) {
		this.txtIdTpEstPqr_TipoEstadoPqr = txtIdTpEstPqr_TipoEstadoPqr;
	}

	public SelectOneMenu getTxtIdTpSolPqr_TipoSolicitudPqr() {
		return txtIdTpSolPqr_TipoSolicitudPqr;
	}

	public void setTxtIdTpSolPqr_TipoSolicitudPqr(
			SelectOneMenu txtIdTpSolPqr_TipoSolicitudPqr) {
		this.txtIdTpSolPqr_TipoSolicitudPqr = txtIdTpSolPqr_TipoSolicitudPqr;
	}

	public Long getIdInfoSolicitante_InfoSolicitante() {
		return idInfoSolicitante_InfoSolicitante;
	}

	public void setIdInfoSolicitante_InfoSolicitante(
			Long idInfoSolicitante_InfoSolicitante) {
		this.idInfoSolicitante_InfoSolicitante = idInfoSolicitante_InfoSolicitante;
	}

	public String getDescripcionCaso() {
		return descripcionCaso;
	}

	public void setDescripcionCaso(String descripcionCaso) {
		this.descripcionCaso = descripcionCaso;
	}

	public String getNombreAgenciaAduana() {
		return nombreAgenciaAduana;
	}

	public void setNombreAgenciaAduana(String nombreAgenciaAduana) {
		this.nombreAgenciaAduana = nombreAgenciaAduana;
	}

	public String getNombreCliente() {
		return nombreCliente;
	}

	public void setNombreCliente(String nombreCliente) {
		this.nombreCliente = nombreCliente;
	}

	public String getNumeroRadicado() {
		return numeroRadicado;
	}

	public void setNumeroRadicado(String numeroRadicado) {
		this.numeroRadicado = numeroRadicado;
	}

	public String getSolicitudARealizar() {
		return SolicitudARealizar;
	}

	public void setSolicitudARealizar(String solicitudARealizar) {
		SolicitudARealizar = solicitudARealizar;
	}

	public Long getIdTpEstPqr_TipoEstadoPqr() {
		return idTpEstPqr_TipoEstadoPqr;
	}

	public void setIdTpEstPqr_TipoEstadoPqr(Long idTpEstPqr_TipoEstadoPqr) {
		this.idTpEstPqr_TipoEstadoPqr = idTpEstPqr_TipoEstadoPqr;
	}

	public Long getIdTpSolPqr_TipoSolicitudPqr() {
		return idTpSolPqr_TipoSolicitudPqr;
	}

	public void setIdTpSolPqr_TipoSolicitudPqr(Long idTpSolPqr_TipoSolicitudPqr) {
		this.idTpSolPqr_TipoSolicitudPqr = idTpSolPqr_TipoSolicitudPqr;
	}

	public Map<String, String> getId_infoSolicitante() {
		try {
			List<InfoSolicitanteDTO> datosInfoSolicitante = businessDelegatorView
					.getDataInfoSolicitante();
			for (int i = 0; i < datosInfoSolicitante.size(); i++) {
				id_infoSolicitante.put(datosInfoSolicitante.get(i)
						.getNombreContacto(), datosInfoSolicitante.get(i)
						.getIdInfoSolicitante() + "");

			}
		} catch (Exception e) {

			e.printStackTrace();
		}

		return id_infoSolicitante;
	}

	public void setId_infoSolicitante(Map<String, String> id_infoSolicitante) {
		this.id_infoSolicitante = id_infoSolicitante;
	}

	public Map<String, String> getId_tipoEstadoPqr() {
		try {
			List<TipoEstadoPqr> datosTipoEstadoPqr = businessDelegatorView
					.getTipoEstadoPqr();
			for (int i = 0; i < datosTipoEstadoPqr.size(); i++) {
				id_tipoEstadoPqr.put(datosTipoEstadoPqr.get(i)
						.getDescripcionEstado(), datosTipoEstadoPqr.get(i)
						.getIdTpEstPqr() + "");

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return id_tipoEstadoPqr;
	}

	public void setId_tipoEstadoPqr(Map<String, String> id_tipoEstadoPqr) {
		this.id_tipoEstadoPqr = id_tipoEstadoPqr;
	}

	public String getId_infoSolicitante_solicitante() {
		return id_infoSolicitante_solicitante;
	}

	public void setId_infoSolicitante_solicitante(
			String id_infoSolicitante_solicitante) {
		this.id_infoSolicitante_solicitante = id_infoSolicitante_solicitante;
	}

	public String getId_tipoEstadoPqr_estadoPqr() {
		return id_tipoEstadoPqr_estadoPqr;
	}

	public void setId_tipoEstadoPqr_estadoPqr(String id_tipoEstadoPqr_estadoPqr) {
		this.id_tipoEstadoPqr_estadoPqr = id_tipoEstadoPqr_estadoPqr;
	}

	public String getId_tipoSolicitudPqr_solicitudPqr() {
		return id_tipoSolicitudPqr_solicitudPqr;
	}

	public void setId_tipoSolicitudPqr_solicitudPqr(
			String id_tipoSolicitudPqr_solicitudPqr) {
		this.id_tipoSolicitudPqr_solicitudPqr = id_tipoSolicitudPqr_solicitudPqr;
	}

	public Map<String, String> getId_tipoSolicitudPqr() {
		try {
			List<TipoSolicitudPqr> datosTipoSolicitudpqr = businessDelegatorView
					.getTipoSolicitudPqr();
			for (int i = 0; i < datosTipoSolicitudpqr.size(); i++) {
				id_tipoSolicitudPqr.put(datosTipoSolicitudpqr.get(i)
						.getDescTpSol(), datosTipoSolicitudpqr.get(i)
						.getIdTpSolPqr() + "");

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return id_tipoSolicitudPqr;
	}

	public void setId_tipoSolicitudPqr(Map<String, String> id_tipoSolicitudPqr) {
		this.id_tipoSolicitudPqr = id_tipoSolicitudPqr;
	}

	public void onEdit(org.primefaces.event.RowEditEvent event) {

		try {

			entity = null;
			entity = businessDelegatorView
					.getSolicitudPqr(((SolicitudPqrDTO) event.getObject())
							.getIdSolPqr());

			numeroRadicado = ((SolicitudPqrDTO) event.getObject())
					.getNumeroRadicacion();
			nombreCliente = ((SolicitudPqrDTO) event.getObject())
					.getNombreCliente();
			nombreAgenciaAduana = ((SolicitudPqrDTO) event.getObject())
					.getNombreAgenciaAduana();
			descripcionCaso = ((SolicitudPqrDTO) event.getObject())
					.getDescripcionCaso();
			SolicitudARealizar = ((SolicitudPqrDTO) event.getObject())
					.getSolicitudARealizar();

			TipoEstadoPqr entity2 = businessDelegatorView
					.getTipoEstadoPqr(getIdTpEstPqr_TipoEstadoPqr());
			entity.setTipoEstadoPqr(entity2);

			InfoSolicitante entity3 = businessDelegatorView
					.getInfoSolicitante(idInfoSolicitante_InfoSolicitante);
			entity.setInfoSolicitante(entity3);

			TipoSolicitudPqr entity4 = businessDelegatorView
					.getTipoSolicitudPqr(idTpSolPqr_TipoSolicitudPqr);
			entity.setTipoSolicitudPqr(entity4);

			entity.setNumeroRadicacion(numeroRadicado);
			entity.setNombreCliente(nombreCliente);
			entity.setNombreAgenciaAduana(nombreAgenciaAduana);
			entity.setDescripcionCaso(descripcionCaso);
			entity.setSolicitudARealizar(SolicitudARealizar);

			entity.setFechaCreacion(util.fecha());

			businessDelegatorView.updateSolicitudPqr(entity);
			data = businessDelegatorView.getDataSolicitudPqr();

			RequestContext.getCurrentInstance().reset("form:listaTDo");

			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void onCancel(org.primefaces.event.RowEditEvent event) {
		FacesMessage msg = new FacesMessage("TipoEstado Cancelled",
				((SolicitudPqrDTO) event.getObject()).getIdSolPqr() + "");

		FacesContext.getCurrentInstance().addMessage(null, msg);
		System.out.println("Cancelado"
				+ ((SolicitudPqrDTO) event.getObject()).getIdSolPqr());
	}

	public void consultarDatas() throws ZMessManager, Exception {

		data = businessDelegatorView.consultarSolicitudes(
				FacesUtils.checkString(txtNumeroRadicacion),
				FacesUtils.checkInteger(txtIdTpSolPqr_TipoSolicitudPqr),
				FacesUtils.checkInteger(txtIdTpEstPqr_TipoEstadoPqr), fechaDes,
				fechaHast);
	}

	public String consultar() {
		idSolicitudSeleccionada = selectedSolicitudPqr.getIdSolPqr();
		try {
			entity = businessDelegatorView
					.getSolicitudPqr(idSolicitudSeleccionada);
			List<DetalleDTO> detalle = businessDelegatorView
					.consultarDetalle(entity.getNumeroRadicacion());

			nombreEmpresa = detalle.get(0).getNombreEmpresa();
			fecha = detalle.get(0).getFecha();
			nombreContacto = detalle.get(0).getNombreContacto();
			correo = detalle.get(0).getCorreo();
			celular = detalle.get(0).getCelular();
			telefono = detalle.get(0).getTelefono();
			descrip = detalle.get(0).getDescripcionCaso();
			iden = detalle.get(0).getNumeroIdentificacion();

			inNombreEmpresa.setValue(nombreEmpresa);
			inNombrecontacto.setValue(nombreContacto);
			incorreo.setValue(correo);
			incelular.setValue(celular);
			intelefono.setValue(telefono);
			indescripcion.setValue(descrip);
			identificacion.setValue(iden);

			try {
				respuestas = businessDelegatorView
						.traerRespuesta(selectedSolicitudPqr.getIdSolPqr());
				panel.setVisible(true);
				if (respuestas.isEmpty()) {
					panel.setVisible(false);
				}
				for (int i = 0; i < respuestas.size(); i++) {
					List<AnexosRespuestaDTO> lista = businessDelegatorView
							.traerAnexos(respuestas.get(i).getIdRespSol());
					anexosRespuesta.add(lista);
					respuestas.get(i).setListaAnexos(anexosRespuesta.get(i));
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

	public StreamedContent fileDownloadView(AnexosRespuestaDTO respuestaAnexos) {

		StreamedContent file = null;

		try {
			initSession();
			AnexosRespuesta imagen = (AnexosRespuesta) session.get(
					AnexosRespuesta.class, respuestaAnexos.getIdAnxResp());

			Blob blob = new SerialBlob(imagen.getDocumentoReal());
			byte[] blobBytes = blob.getBytes(1, (int) blob.length());

			InputStream stream = new ByteArrayInputStream(blobBytes);

			file = new DefaultStreamedContent(stream,
					respuestaAnexos.getNombreBusqueda(), respuestaAnexos.getNombreAnexo());
			endSession();

		} catch (Exception e) {
			System.out.println(e.getMessage());
			endSession();
		}

		return file;
	}

	public Calendar getTxtFechaHasta() {
		return txtFechaHasta;
	}

	public void setTxtFechaHasta(Calendar txtFechaHasta) {
		this.txtFechaHasta = txtFechaHasta;
	}

	public String getFechaHast() {
		return fechaHast;
	}

	public void setFechaHast(String fechaHast) {
		this.fechaHast = fechaHast;
	}

	public String getFechaDes() {
		return fechaDes;
	}

	public void setFechaDes(String fechaDes) {
		this.fechaDes = fechaDes;
	}

	public void limpiar() {
		data = null;
		lista = null;
		descrip2 = "";
		indescripcion.setValue(descrip2);
		check.setValue(false);
		RequestContext context = RequestContext.getCurrentInstance();
		context.update("dialog");
	}

	public String getNombreEmpresa() {

		return nombreEmpresa;
	}

	public void setNombreEmpresa(String nombreEmpresa) {
		this.nombreEmpresa = nombreEmpresa;
	}

	public InputText getInNombreEmpresa() {
		return inNombreEmpresa;
	}

	public void setInNombreEmpresa(InputText inNombreEmpresa) {
		this.inNombreEmpresa = inNombreEmpresa;
	}

	public List<SolicitudPqrDTO> getData2() {
		try {
			if (data2 == null) {

				data2 = businessDelegatorView
						.getDataSolicitudPqrByLogin(FacesUtils.login());
			} else {
				if (data2.isEmpty() == false
						&& data2.get(0).getNombreArea().trim().toString()
								.equals("SERVICIO AL CLIENTE")) {
					btnSavee.setDisabled(false);
					btnClear.setDisabled(false);
				} else {
					btnSavee.setDisabled(true);
					btnClear.setDisabled(true);
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return data2;
	}

	public void setData2(List<SolicitudPqrDTO> data2) {
		this.data2 = data2;
	}

	public DetalleDTO getSeleDetalleDTO() {
		return seleDetalleDTO;
	}

	public void setSeleDetalleDTO(DetalleDTO seleDetalleDTO) {
		this.seleDetalleDTO = seleDetalleDTO;
	}

	public List<DetalleDTO> getDetallesDTOs() {
		return detallesDTOs;
	}

	public void setDetallesDTOs(List<DetalleDTO> detallesDTOs) {
		this.detallesDTOs = detallesDTOs;
	}

	public SolicitudPqr getEntity() {
		return entity;
	}

	public void setEntity(SolicitudPqr entity) {
		this.entity = entity;
	}

	public Long getIdSolicitudSeleccionada() {
		return idSolicitudSeleccionada;
	}

	public void setIdSolicitudSeleccionada(Long idSolicitudSeleccionada) {
		this.idSolicitudSeleccionada = idSolicitudSeleccionada;
	}

	public String getDescrip() {
		return descrip;
	}

	public void setDescrip(String descrip) {
		this.descrip = descrip;
	}

	public Map<String, String> getId_area() {

		try {
			List<AreasInvolucradasDTO> areas = businessDelegatorView
					.getDataAreasInvolucradas();

			if (data2.isEmpty() == false) {
				for (int i = 0; i < areas.size(); i++) {
					if (data2.get(0).getIdArea()
							.equals(areas.get(i).getIdAreaInvolucrada())) {

					} else {
						id_area.put(areas.get(i).getNombreArea(), areas.get(i)
								.getIdAreaInvolucrada() + "");
					}
				}

			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return id_area;
	}

	public void setId_area(Map<String, String> id_area) {
		this.id_area = id_area;
	}

	public SelectOneMenu getAreasInvo() {
		return areasInvo;
	}

	public void setAreasInvo(SelectOneMenu areasInvo) {
		this.areasInvo = areasInvo;
	}

	public Long getIdanex() {
		return idanex;
	}

	public void setIdanex(Long idanex) {
		this.idanex = idanex;
	}

	public InputText getIdentificacion() {
		return identificacion;
	}

	public void setIdentificacion(InputText identificacion) {
		this.identificacion = identificacion;
	}

	public String getIden() {
		return iden;
	}

	public void setIden(String iden) {
		this.iden = iden;
	}

	public String getDescrip3() {
		return descrip3;
	}

	public void setDescrip3(String descrip3) {
		this.descrip3 = descrip3;
	}

	public InputTextarea getIndescripcion3() {
		return indescripcion3;
	}

	public void setIndescripcion3(InputTextarea indescripcion3) {
		this.indescripcion3 = indescripcion3;
	}

	public CommandButton getBtnSavee() {
		return btnSavee;
	}

	public void setBtnSavee(CommandButton btnSavee) {
		this.btnSavee = btnSavee;
	}

	public SelectBooleanCheckbox getCheck() {
		return check;
	}

	public void setCheck(SelectBooleanCheckbox check) {
		this.check = check;
	}

	public List<AnxsXAreaDTO> getAnexos() {
		try {
			if (data2.isEmpty() == false) {
				List<AnxsXAreaDTO> datosAnexos = businessDelegatorView
						.traerAnexosPorArea(data2.get(0).getIdArea());

				anexos = datosAnexos;

			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return anexos;
	}

	public void setAnexos(List<AnxsXAreaDTO> anexos) {
		this.anexos = anexos;
	}

	private UploadedFile file;
	private List<UploadedFile> lista;

	public List<UploadedFile> getLista() {
		return lista;
	}

	public void setLista(List<UploadedFile> lista) {
		this.lista = lista;
	}

	public UploadedFile getFile() {
		return file;
	}

	public void setFile(UploadedFile file) {
		this.file = file;
	}

	public void handleFileUpload(FileUploadEvent event) {

		if (lista == null) {
			lista = new ArrayList<UploadedFile>();
			file = event.getFile();
			lista.add(file);
			check.setValue(true);
			getCheck();
			FacesMessage message = new FacesMessage("Archivo "
					+ event.getFile().getFileName()
					+ " adjuntado satisfatoriamente.", "");
			FacesContext.getCurrentInstance().addMessage(null, message);

		} else {
			file = event.getFile();
			lista.add(file);
			check.setValue(true);
			getCheck();
			FacesMessage message = new FacesMessage("Archivo "
					+ event.getFile().getFileName()
					+ " adjuntado satisfatoriamente.", "");
			FacesContext.getCurrentInstance().addMessage(null, message);
		}

	}

	public String cambiarDeArea() {
		try {
			if (descrip2.trim() == "") {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								null,
								new FacesMessage(
										FacesMessage.SEVERITY_ERROR,
										"Falta la Observacion. Envie una explicacion certera",
										""));
				return "";
			}

			if (lista == null) {
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_ERROR,
								"No hay ningun archivo adjunto!", ""));
				return "";
			}

			if (lista.size() < anexos.size()) {
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_ERROR,
								"Faltan anexos por adjuntar!", ""));
				return "";

			} else {

				entity = businessDelegatorView
						.getSolicitudPqr(idSolicitudSeleccionada);

				for (int i = 0; i < lista.size(); i++) {
					if (lista.get(i) != null) {
						byte[] imageInByte = lista.get(i).getContents();
						FileImageOutputStream imageOutput;
						imageOutput = new FileImageOutputStream(new File(lista
								.get(i).getFileName()));
						imageOutput.write(imageInByte, 0, imageInByte.length);
						imageOutput.close();

						Blob blob = null;
						try {
							blob = new SerialBlob(imageInByte);
						} catch (SerialException e) {
							e.printStackTrace();
						} catch (SQLException e) {
							e.printStackTrace();
						}

						anexosRespuestaDTO = new AnexosRespuestaDTO();

						anexosRespuestaDTO.setDocumentoReal(blob);
						anexosRespuestaDTO.setNombreAnexo(lista.get(i)
								.getFileName());
						anexosRespuestaDTO.setNombreBusqueda(lista.get(i)
								.getFileName());
						anexosRespuestaDTO.setIdAnexoPqr_AnexosPqr(anexos
								.get(i).getIdAnexoPqr_AnexosPqr());
						anexosRespuestaDTO.setFechaCreacion(new Date());

						if (listaAnexosRespuesta == null) {
							listaAnexosRespuesta = new ArrayList<AnexosRespuestaDTO>();
							listaAnexosRespuesta.add(anexosRespuestaDTO);
						} else {
							listaAnexosRespuesta.add(anexosRespuestaDTO);
						}
					}

				}

				String login = FacesUtils.login();

				for (int i = 0; i < data2.size(); i++) {
					if (entity.getIdSolPqr() == data2.get(i).getIdSolPqr()) {

						businessDelegatorView.cambiarDeArea(entity, idanex,
								listaAnexosRespuesta, data2.get(i)
										.getIdSolicitudArea(), descrip2, login);
						break;
					}
				}
				FacesMessage msg = new FacesMessage(
						"Solicitud Asignada a Otra Area");
				FacesContext.getCurrentInstance().addMessage(null, msg);
				RequestContext context = RequestContext.getCurrentInstance();
				RequestContext.getCurrentInstance().execute(
						"PF('dialog').hide()");
				data2 = null;
				data2 = getData2();
				context.update("listaTDo");
				context.update("form");

			}

		} catch (Exception e) {
			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					"Error del Sistema!", "");
			FacesContext.getCurrentInstance().addMessage(null, msg);
			RequestContext context = RequestContext.getCurrentInstance();
			context.update("form");
			System.out.println(e.getMessage());
			e.printStackTrace();
		}

		return "";

	}

	public String enviarRespuesta() {

		try {
			idSolicitudSeleccionada = selectedSolicitudPqr.getIdSolPqr();

			if (descrip2.trim() == "") {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								null,
								new FacesMessage(
										FacesMessage.SEVERITY_ERROR,
										"Falta la Observacion. Envie una explicacion certera",
										""));
				return "";
			}

			if (lista == null) {
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_ERROR,
								"No hay ningun archivo adjunto!", ""));
				return "";
			}

			if (lista.size() < anexos.size()) {
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_ERROR,
								"Faltan anexos por adjuntar!", ""));
				return "";

			} else {

				for (int i = 0; i < lista.size(); i++) {
					if (lista.get(i) != null) {
						byte[] imageInByte = lista.get(i).getContents();
						FileImageOutputStream imageOutput;
						imageOutput = new FileImageOutputStream(new File(lista
								.get(i).getFileName()));
						imageOutput.write(imageInByte, 0, imageInByte.length);
						imageOutput.close();

						Blob blob = null;
						try {
							blob = new SerialBlob(imageInByte);
						} catch (SerialException e) {
							e.printStackTrace();
						} catch (SQLException e) {
							e.printStackTrace();
						}

						anexosRespuestaDTO = new AnexosRespuestaDTO();

						anexosRespuestaDTO.setDocumentoReal(blob);
						anexosRespuestaDTO.setNombreAnexo(lista.get(i)
								.getFileName());
						anexosRespuestaDTO.setNombreBusqueda(lista.get(i)
								.getContentType());
						anexosRespuestaDTO.setIdAnexoPqr_AnexosPqr(anexos
								.get(i).getIdAnexoPqr_AnexosPqr());
						anexosRespuestaDTO.setFechaCreacion(new Date());

						if (listaAnexosRespuesta == null) {
							listaAnexosRespuesta = new ArrayList<AnexosRespuestaDTO>();
							listaAnexosRespuesta.add(anexosRespuestaDTO);
						} else {
							listaAnexosRespuesta.add(anexosRespuestaDTO);
						}
					}

				}

				businessDelegatorView.enviarCorreo(descrip2,
						listaAnexosRespuesta, data2.get(0).getCorreoCliente());

				String login = FacesUtils.login();

				for (int i = 0; i < data2.size(); i++) {
					if (entity.getIdSolPqr() == data2.get(i).getIdSolPqr()) {
						businessDelegatorView.responderSolicitud(
								listaAnexosRespuesta, idSolicitudSeleccionada,
								data2.get(i).getIdArea(), data2.get(i)
										.getIdSolicitudArea(), descrip2, login,
								data2.get(i).getCorreoCliente());
						break;
					}
				}

				FacesMessage msg = new FacesMessage(
						"Respuesta Realizada con Exito");
				FacesContext.getCurrentInstance().addMessage(null, msg);
				RequestContext context = RequestContext.getCurrentInstance();
				RequestContext.getCurrentInstance().execute(
						"PF('dialog').hide()");
				data2 = null;
				data2 = getData2();
				context.update("listaTDo");
				context.update("form");
			}
		} catch (Exception e) {
			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					"Error del Sistema!", "");
			FacesContext.getCurrentInstance().addMessage(null, msg);
			RequestContext context = RequestContext.getCurrentInstance();
			context.update("form");
			System.out.println(e.getMessage());
			e.printStackTrace();

		}
		return "";

	}

	public AnexosRespuestaDTO getAnexosRespuestaDTO() {
		return anexosRespuestaDTO;
	}

	public void setAnexosRespuestaDTO(AnexosRespuestaDTO anexosRespuestaDTO) {
		this.anexosRespuestaDTO = anexosRespuestaDTO;
	}

	public List<AnexosRespuestaDTO> getListaAnexosRespuesta() {
		return listaAnexosRespuesta;
	}

	public void setListaAnexosRespuesta(
			List<AnexosRespuestaDTO> listaAnexosRespuesta) {
		this.listaAnexosRespuesta = listaAnexosRespuesta;
	}

	public int getIdSolPqr() {
		return idSolPqr;
	}

	public void setIdSolPqr(int idSolPqr) {
		this.idSolPqr = idSolPqr;
	}

	public Panel getPanel() {
		return panel;
	}

	public void setPanel(Panel panel) {
		this.panel = panel;
	}

	public List<RespuestaSolDTO> getRespuestas() {
		return respuestas;
	}

	public void setRespuestas(List<RespuestaSolDTO> respuestas) {
		this.respuestas = respuestas;
	}

	public List<List<AnexosRespuestaDTO>> getAnexosRespuesta() {
		return anexosRespuesta;
	}

	public void setAnexosRespuesta(
			List<List<AnexosRespuestaDTO>> anexosRespuesta) {
		this.anexosRespuesta = anexosRespuesta;
	}

	private static Session session;
	private static ServiceRegistry serviceRegistry;

	private static void endSession() {
		session.getTransaction().commit();
		session.close();

		StandardServiceRegistryBuilder.destroy(serviceRegistry);
	}

	private static void initSession() {
		Configuration configuration = new Configuration().configure();
		serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
				configuration.getProperties()).build();

		SessionFactory sessionFactory = configuration
				.buildSessionFactory(serviceRegistry);

		session = sessionFactory.openSession();
		session.beginTransaction();
	}
}
